package main

import (
	"fmt"
	//"github.com/garyburd/redigo/redis"
	"github.com/gomodule/redigo/redis"
)

func main() {
	//连接redis
	conn, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil{
		fmt.Println("redis 连接错误", err)
		return
	}
	defer conn.Close()
	// 操作string
	// 读取
	//data, err := conn.Do("Get", "name")
	//这种方式取到的data 为interface{}类型。需类型断言获得string类型
	//r := data.(string)
	_, err = conn.Do("Set", "name", "明")
	if err != nil{
		fmt.Println("设置错误", err)
		return
	}
	// 设置过期时间
	_, err = conn.Do("expire","name", 10) // 给name设置10秒过期
	if err != nil{
		fmt.Println("设置过期时间错误", err)
		return
	}

	data, err := redis.String(conn.Do("Get", "name"))
	if err != nil{
		fmt.Println("读取错误", err)
		return
	}
	fmt.Printf("类型%T， 值%v\n", data, data)


	//操作hash
	_, err = conn.Do("HSet", "person", "name", "王五")
	if err != nil{
		fmt.Println("HSet错误", err)
		return
	}
	_, err = conn.Do("HSet", "person", "age", 20)
	if err != nil{
		fmt.Println("HSet错误", err)
		return
	}

	// 读取hash数据
	hashData1, err := redis.String(conn.Do("HGet", "person", "name"))
	if err != nil{
		fmt.Println("HGet错误", err)
		return
	}
	hashData2, err := redis.String(conn.Do("HGet", "person", "age"))
	if err != nil{
		fmt.Println("HGet错误", err)
		return
	}
	fmt.Println(hashData1, hashData2)

	// 上述方式麻烦，可以使用HMSet/ HMGet
	_, err = conn.Do("HMSet", "person1","name", "老六", "age", 25)
	if err != nil{
		fmt.Println("HMSet错误", err)
		return
	}
	// 注意这里是 redis.Strings
	hashData, err := redis.Strings(conn.Do("HMGet", "person1", "name", "age"))
	if err != nil{
		fmt.Println("HMGet错误", err)
		return
	}
	//for _, v := range hashData{
	//	fmt.Printf("hash类型%T， 值-%v\n",v, v)
	//}
	fmt.Printf("hash类型%T， 值-%v",hashData, hashData)
}